home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 001 / pibt3sp1.arc / EXECUTEC.PAS < prev    next >
Pascal/Delphi Source File  |  1985-09-19  |  24KB  |  597 lines

  1. (*----------------------------------------------------------------------*)
  2. (*           Execute_Command --- Execute PibTerm  command               *)
  3. (*----------------------------------------------------------------------*)
  4.  
  5. PROCEDURE Execute_Command;
  6.  
  7. (*----------------------------------------------------------------------*)
  8. (*                                                                      *)
  9. (*     Procedure:  Execute_Command                                      *)
  10. (*                                                                      *)
  11. (*     Purpose:    Execute PibTerm Commands                             *)
  12. (*                                                                      *)
  13. (*     Calling Sequence:                                                *)
  14. (*                                                                      *)
  15. (*        Execute_Command( VAR Command    : Pibterm_Command_Type;       *)
  16. (*                         VAR Done       : BOOLEAN;                    *)
  17. (*                             Use_Script : BOOLEAN );                  *)
  18. (*                                                                      *)
  19. (*           Command    --- Command to execute                          *)
  20. (*           Done       --- set TRUE if termination command found       *)
  21. (*           Use_Script --- TRUE if this is a script command execution  *)
  22. (*                                                                      *)
  23. (*      Calls:   Async_Send_String                                      *)
  24. (*               PibDialer                                              *)
  25. (*               Async_Send_Break                                       *)
  26. (*               Async_Carrier_Detect                                   *)
  27. (*               Display_Commands                                       *)
  28. (*               Delay                                                  *)
  29. (*               GetAreaCode                                            *)
  30. (*               PibUpLoad                                              *)
  31. (*               PibDownLoad                                            *)
  32. (*               Save_Screen                                            *)
  33. (*               Restore_Screen                                         *)
  34. (*               Draw_Menu_Frame                                        *)
  35. (*               Fast_Change_Params                                     *)
  36. (*               PibFileManipulation                                    *)
  37. (*               Get_Capture_File                                       *)
  38. (*               Toggle_Option                                          *)
  39. (*               HangUpPhone                                            *)
  40. (*               Send_Function_Key                                      *)
  41. (*               Set_Input_Keys                                         *)
  42. (*               Set_Translate_Table                                    *)
  43. (*               Do_Screen_Dump                                         *)
  44. (*               DosJump                                                *)
  45. (*                                                                      *)
  46. (*----------------------------------------------------------------------*)
  47.  
  48. VAR
  49.    Flag       : BOOLEAN;
  50.    I          : INTEGER;
  51.    J          : INTEGER;
  52.    T_Type     : Terminal_Type;
  53.    TimeW      : STRING[8];
  54.    TimeN      : STRING[8];
  55.    TimeO      : STRING[8];
  56.    Local_Save : Saved_Screen_Ptr;
  57.    ESC_Found  : BOOLEAN;
  58.    Trans_Type : Transfer_Type;
  59.    Ch         : CHAR;
  60.    Rem_Ch     : CHAR;
  61.    XPos       : INTEGER;
  62.    GotChar    : BOOLEAN;
  63.    S          : AnyStr;
  64.    Echo       : BOOLEAN;
  65.  
  66. (*----------------------------------------------------------------------*)
  67. (*           Remote_Input --- get remote input in response to prompt    *)
  68. (*----------------------------------------------------------------------*)
  69.  
  70. PROCEDURE Remote_Input;
  71.  
  72. (*----------------------------------------------------------------------*)
  73. (*                                                                      *)
  74. (*     Procedure:  Remote_Input                                         *)
  75. (*                                                                      *)
  76. (*     Purpose:    Gets remote input (from host system) in response to  *)
  77. (*                 prompt.                                              *)
  78. (*                                                                      *)
  79. (*     Calling Sequence:                                                *)
  80. (*                                                                      *)
  81. (*        Remote_Input;                                                 *)
  82. (*                                                                      *)
  83. (*           Global string  -Script_Remote_Reply- get the resultant     *)
  84. (*           input.                                                     *)
  85. (*                                                                      *)
  86. (*      Calls:   Async_Send                                             *)
  87. (*               Send_Function_Key                                      *)
  88. (*               Async_Receive                                          *)
  89. (*                                                                      *)
  90. (*----------------------------------------------------------------------*)
  91.  
  92. VAR
  93.    Rem_Ch     : CHAR;
  94.    XPos       : INTEGER;
  95.    GotChar    : BOOLEAN;
  96.    S          : AnyStr;
  97.    Echo       : BOOLEAN;
  98.    Ch         : CHAR;
  99.  
  100. BEGIN (* Remote_Input *)
  101.                                    (* Send prompt to remote system *)
  102.  
  103.    IF LENGTH( Script_String ) > 0 THEN
  104.       Send_Function_Key( Script_String );
  105.  
  106.    Ch                  := CHR( 0 );
  107.    Script_Remote_Reply := '';
  108.    XPos                := WhereX;
  109.    Echo                := ( Script_Integer_1 > 0 );
  110.  
  111.                                    (* Get response string        *)
  112.    REPEAT
  113.  
  114.       GotChar := FALSE;
  115.                                    (* Check for keyboard input   *)
  116.       IF KeyPressed THEN
  117.          BEGIN
  118.             READ( Kbd, Ch );
  119.             GotChar := TRUE;
  120.          END;
  121.                                    (* Check for remote input *)
  122.  
  123.       IF Async_Receive( Rem_Ch ) THEN
  124.          BEGIN
  125.             Ch      := Rem_Ch;
  126.             GotChar := TRUE;
  127.          END;
  128.                                    (* Process received character *)
  129.       IF GotChar THEN
  130.          IF Ch <> CHR( CR ) THEN
  131.             IF Ch = ^H THEN
  132.                BEGIN  (* Backspace *)
  133.                   IF WhereX > Xpos THEN
  134.                      BEGIN
  135.                         Async_Send( Ch  );
  136.                         WRITE( Ch );
  137.                         Async_Send( ' ' );
  138.                         WRITE( ' ' );
  139.                         Async_Send( Ch  );
  140.                         WRITE( Ch );
  141.                         IF ( LENGTH( Script_Remote_Reply ) > 1 ) THEN
  142.                            Script_Remote_Reply := COPY( Script_Remote_Reply,
  143.                                                   2,
  144.                                                   LENGTH( Script_Remote_Reply ) - 1 )
  145.                         ELSE
  146.                            Script_Remote_Reply := '';
  147.                      END;
  148.                END   (* Backspace *)
  149.             ELSE
  150.                BEGIN
  151.                   Script_Remote_Reply := Script_Remote_Reply + Ch;
  152.                   IF Echo THEN
  153.                      BEGIN
  154.                         Async_Send( Ch );
  155.                         WRITE( Ch );
  156.                      END
  157.                   ELSE
  158.                      BEGIN
  159.                         Async_Send( '.' );
  160.                         WRITE( '.' );
  161.                      END
  162.                END;
  163.  
  164.    UNTIL ( Ch = CHR( CR ) ) OR ( NOT Async_Carrier_Detect );
  165.  
  166.    Script_Remote_Reply_Ok := FALSE;
  167.  
  168. END   (* Remote_Input *);
  169.  
  170. (*----------------------------------------------------------------------*)
  171.  
  172. BEGIN (* Execute_Command *)
  173.                                    (* Don't get confused by previous *)
  174.                                    (* script strings if manual entry *)
  175.    IF ( NOT Use_Script ) THEN
  176.       BEGIN
  177.          Script_String    := '';
  178.          Script_String_2  := '';
  179.          Script_Integer_1 := 0;
  180.       END;
  181.                                    (* Execute chosen command *)
  182.    CASE Command Of
  183.  
  184.       Null_Command,
  185.       Bad_Command :  ;
  186.  
  187.       AddLFSy     :  Toggle_Option( 'Add line feeds', Add_LF );
  188.  
  189.       AreaCodeSy  :  GetAreaCode;
  190.  
  191.       BreakSy     :  Async_Send_Break;
  192.  
  193.       CaptureSy   :  Get_Capture_File( Script_String );
  194.  
  195.       ClearSy     :  ClrScr;
  196.  
  197.       DelaySy     :  DELAY( Delay_Time );
  198.  
  199.       DialSy      :  BEGIN
  200.                         PibDialer( FALSE , Script_String );
  201.                         Script_String := '';
  202.                      END;
  203.  
  204.       DosSy       :  BEGIN
  205.                         DosJump( Script_String );
  206.                         Script_String := '';
  207.                      END;
  208.  
  209.       EchoSy      :  Toggle_Option( 'Local Echo', Local_Echo );
  210.  
  211.       EditSy      :  Edit_A_Line;
  212.  
  213.       ExitSy      :  IF Script_File_Mode THEN
  214.                         BEGIN
  215.                            Toggle_Option( 'Script Mode', Script_File_Mode );
  216.                            IF Script_Buffer_Size > 0 THEN
  217.                               FREEMEM( Script_Buffer , Script_Buffer_Size );
  218.                            Script_Buffer      := NIL;
  219.                            Script_Buffer_Size := 0;
  220.                         END;
  221.  
  222.       FastCSy     :  Fast_Change_Params;
  223.  
  224.       FileSy      :  PibFileManipulation;
  225.  
  226.       GossipSy    :  BEGIN
  227.                         Toggle_Option( 'Gossip mode', Gossip_Mode_On );
  228.                         Done := TRUE;
  229.                         IF Gossip_Mode_On THEN
  230.                            BEGIN
  231.                               Saved_Gossip_Term   := Terminal_To_Emulate;
  232.                               Terminal_To_Emulate := Gossip;
  233.                            END
  234.                         ELSE
  235.                            BEGIN
  236.                               Terminal_To_Emulate := Saved_Gossip_Term;
  237.                            END;
  238.                      END;
  239.  
  240.       GoToSy      :  Script_Buffer_Pos := Script_Integer_1 - 1;
  241.  
  242.       HangUpSy    :  BEGIN (* Hang-up Phone *)
  243.  
  244.                         Save_Screen( Saved_Screen );
  245.  
  246.                         Draw_Menu_Frame( 10, 10, 60, 15, Menu_Frame_Color,
  247.                                          Menu_Text_Color, '' );
  248.  
  249.                         WRITELN;
  250.                         WRITELN('*** Hanging up the phone ***');
  251.  
  252.                                    (* Hang up the phone *)
  253.  
  254.                         HangUpPhone;
  255.  
  256.                         IF Async_Carrier_Detect THEN
  257.                            WRITELN('*** Phone not hung up, try again ***')
  258.                         ELSE
  259.                            BEGIN
  260.                               WRITELN('*** Phone hung up ***');
  261.                               Flag := Async_Open( Comm_Port, Baud_Rate,
  262.                                                   Parity, Data_Bits,
  263.                                                   Stop_Bits );
  264.                            END;
  265.  
  266.                         DELAY( Two_Second_Delay );
  267.  
  268.                         Restore_Screen( Saved_Screen );
  269.  
  270.                         Reset_Global_Colors;
  271.  
  272.                      END   (* Hang-up Phone *);
  273.  
  274.       HostSy      :  BEGIN (* Set host mode *)
  275.                         Done                := TRUE;
  276.                         Saved_Gossip_Term   := Terminal_To_Emulate;
  277.                         Terminal_To_Emulate := HostMode;
  278.                      END   (* Set host mode *);
  279.  
  280.       IfConSy     :  IF ( Script_Integer_1 = 1 ) THEN
  281.                         IF Async_Carrier_Detect THEN
  282.                            Script_Buffer_Pos := Script_Integer_2 - 1
  283.                         ELSE
  284.                            Script_Buffer_Pos := Script_Integer_3 - 1
  285.                      ELSE
  286.                         IF ( NOT Async_Carrier_Detect ) THEN
  287.                            Script_Buffer_Pos := Script_Integer_2 - 1
  288.                         ELSE
  289.                            Script_Buffer_Pos := Script_Integer_3 - 1;
  290.  
  291.       IfFoundSy   :  IF ( Script_Integer_1 = 1 ) THEN
  292.                         IF Script_Wait_Found THEN
  293.                            Script_Buffer_Pos := Script_Integer_2 - 1
  294.                         ELSE
  295.                            Script_Buffer_Pos := Script_Integer_3 - 1
  296.                      ELSE
  297.                         IF ( NOT Script_Wait_Found ) THEN
  298.                            Script_Buffer_Pos := Script_Integer_2 - 1
  299.                         ELSE
  300.                            Script_Buffer_Pos := Script_Integer_3 - 1;
  301.  
  302.       IfLocStrSy  :  BEGIN
  303.  
  304.                         Script_Reply_Found := FALSE;
  305.  
  306.                         IF ( LENGTH( Script_Reply ) > 0 ) THEN
  307.                            Script_Reply_Found :=
  308.                               ( POS( Script_Reply , Script_String ) > 0 );
  309.  
  310.                         IF ( Script_Integer_1 <> 1 ) THEN
  311.                            Script_Reply_Found := NOT Script_Reply_Found;
  312.  
  313.                         IF Script_Reply_Found THEN
  314.                            Script_Buffer_Pos := Script_Integer_2 - 1
  315.                         ELSE
  316.                            Script_Buffer_Pos := Script_Integer_3 - 1;
  317.  
  318.                      END;
  319.  
  320.       IfRemStrSy  :  BEGIN
  321.  
  322.                         Script_Remote_Reply_OK := FALSE;
  323.  
  324.                         IF ( LENGTH( Script_Remote_Reply ) > 0 ) THEN
  325.                            Script_Remote_Reply_OK :=
  326.                               ( POS( Script_Remote_Reply , Script_String ) > 0 );
  327.  
  328.                         IF ( Script_Integer_1 <> 1 ) THEN
  329.                            Script_Remote_Reply_OK := NOT Script_Remote_Reply_OK;
  330.  
  331.                         IF Script_Remote_Reply_OK THEN
  332.                            Script_Buffer_Pos := Script_Integer_2 - 1
  333.                         ELSE
  334.                            Script_Buffer_Pos := Script_Integer_3 - 1;
  335.  
  336.                      END;
  337.  
  338.       InputSy     :  BEGIN
  339.                         WRITE( Script_String );
  340.                         READLN( Script_Reply );
  341.                         Script_Reply_Found := FALSE;
  342.                      END;
  343.  
  344.       InfoSy      :  Display_Help( FALSE );
  345.  
  346.       KeySendSy   :  BEGIN
  347.  
  348.                         IF Key_No IN [F1..F10] THEN
  349.                            Send_Function_Key( Function_Keys[ 1, Key_No - 58 ] )
  350.  
  351.                         ELSE IF Key_No IN [Shift_F1..Shift_F10] THEN
  352.                            Send_Function_Key( Function_Keys[ 2, Key_No - 83 ] )
  353.  
  354.                         ELSE IF Key_No IN [Ctrl_F1..Ctrl_F10] THEN
  355.                            Send_Function_Key( Function_Keys[ 3, Key_No - 93 ] )
  356.  
  357.                        ELSE IF Key_No IN [Alt_F1..Alt_F10] THEN
  358.                            Send_Function_Key( Function_Keys[ 4, Key_No - 103 ] )
  359.  
  360.                        ELSE IF ( Keypad_Key_Index[ Key_No ] > 0 ) THEN
  361.                           BEGIN
  362.                              J := Keypad_Key_Index[ Key_No ];
  363.                              I := ( J - 1 ) DIV 10 + 1;
  364.                              J := J - ( I - 1 ) * 10;
  365.                              IF LENGTH( Keypad_Keys[ I , J ] ) > 0 THEN
  366.                                 Send_Function_Key( Keypad_Keys[ I , J ] );
  367.                           END;
  368.  
  369.                      END;
  370.  
  371.       KeySy       :  Set_Input_Keys( Script_String );
  372.  
  373.       LogSy       :  Toggle_Option('List session on printer', Printer_On );
  374.  
  375.       MessageSy   :  WRITELN( Script_String );
  376.  
  377.       MuteSy      :  BEGIN
  378.                         Toggle_Option('Silent Mode', Silent_Mode );
  379.                         Play_Music_On := NOT Silent_Mode;
  380.                         Menu_Set_Beep( NOT Silent_Mode );
  381.                      END;
  382.  
  383.       ParamSy     :  BEGIN
  384.                         T_Type := Terminal_To_Emulate;
  385.                         Flag   := Set_Params( FALSE , Use_Script );
  386.                         Done   := ( Terminal_To_Emulate <> T_Type );
  387.                         IF Read_In_Script THEN
  388.                            BEGIN
  389.                               Read_In_Script   := FALSE;
  390.                               Script_File_Name := '';
  391.                               Process_Script;
  392.                            END;
  393.                      END;
  394.  
  395.       QuitSy      :  BEGIN (* Quit *)
  396.  
  397.                         Save_Screen( Saved_Screen );
  398.  
  399.                         Draw_Menu_Frame( 10, 10, 51, 13, Menu_Frame_Color,
  400.                                          Menu_Text_Color, '' );
  401.  
  402.                         IF Script_File_Mode THEN
  403.                            BEGIN
  404.                               Script_File_Mode :=
  405.                                  NOT YesNo('Stop running current script (Y/N) ? ');
  406.                               IF ( NOT Script_File_Mode ) THEN
  407.                                  BEGIN
  408.                                     IF Script_Buffer_Size > 0 THEN
  409.                                        FREEMEM( Script_Buffer , Script_Buffer_Size );
  410.                                     Script_Buffer      := NIL;
  411.                                     Script_Buffer_Size := 0;
  412.                                  END;
  413.                            END
  414.                         ELSE IF When_Mode THEN
  415.                            BEGIN
  416.                               When_Mode :=
  417.                                  NOT YesNo('Stop WHEN string processing (Y/N) ? ');
  418.                               IF ( NOT When_Mode ) THEN
  419.                                  BEGIN
  420.                                     Script_When_Text       := '';
  421.                                     Script_When_Reply_Text := '';
  422.                                  END;
  423.                            END
  424.                         ELSE
  425.                            Done := YesNo('Are you sure you want to quit (Y/N) ? ');
  426.  
  427.                         Restore_Screen( Saved_Screen );
  428.  
  429.                         Reset_Global_Colors;
  430.  
  431.                         PibTerm_Done := Done;
  432.  
  433.                      END;
  434.  
  435.       RedialSy    :  BEGIN
  436.                         PibDialer( TRUE , Script_String );
  437.                         Script_String := '';
  438.                      END;
  439.  
  440.       ReceiveSy   :  BEGIN
  441.  
  442.                         IF LENGTH( Script_String ) > 0 THEN
  443.                            BEGIN
  444.                               FileName   := Script_String;
  445.                               Trans_Type := Transfers[ Script_Integer_1 ];
  446.                            END
  447.                         ELSE
  448.                            Trans_Type := None;
  449.  
  450.                         PibDownLoad( Trans_Type );
  451.  
  452.                      END;
  453.  
  454.       ResetSy     :  Script_Buffer_Pos := 0;
  455.  
  456.       RInputSy    :  Remote_Input;
  457.  
  458.       SDumpSy     :  Do_Screen_Dump;
  459.  
  460.       SendSy      :  BEGIN
  461.  
  462.                         IF LENGTH( Script_String ) > 0 THEN
  463.                            BEGIN
  464.                               FileName   := Script_String;
  465.                               Trans_Type := Transfers[ Script_Integer_1 ];
  466.                            END
  467.                         ELSE
  468.                            Trans_Type := None;
  469.  
  470.                         PibUpLoad( Trans_Type );
  471.  
  472.                      END;
  473.  
  474.       STextSy     :  BEGIN
  475.                         Send_Function_Key( Read_Ctrls( Script_String ) );
  476.                         Script_String := '';
  477.                      END;
  478.  
  479.       TextSy      :  BEGIN
  480.                         Async_Send_String( Script_String );
  481.                         Script_String := '';
  482.                      END;
  483.  
  484.       TimersSy    :  Display_Timers;
  485.  
  486.       TranslateSy :  Set_Translate_Table( Script_String );
  487.  
  488.       ViewSy      :  IF Review_On THEN
  489.  
  490.                         IF Review_Head > 0 THEN
  491.                            Review_Captured_Text
  492.                         ELSE
  493.                            BEGIN
  494.  
  495.                               Save_Screen( Saved_Screen );
  496.  
  497.                               Draw_Menu_Frame( 10, 10, 60, 14, Menu_Frame_Color,
  498.                                                Menu_Text_Color, '' );
  499.  
  500.                               WRITE('Review buffer empty.');
  501.  
  502.                               DELAY( Two_Second_Delay );
  503.  
  504.                               Restore_Screen( Saved_Screen );
  505.  
  506.                               Reset_Global_Colors;
  507.  
  508.                            END
  509.                         ELSE
  510.                      BEGIN
  511.                         Save_Screen( Saved_Screen );
  512.  
  513.                         Draw_Menu_Frame( 10, 10, 60, 14, Menu_Frame_Color,
  514.                                          Menu_Text_Color, '' );
  515.  
  516.                         WRITE('Review buffer not active.');
  517.  
  518.                         DELAY( Two_Second_Delay );
  519.  
  520.                         Restore_Screen( Saved_Screen );
  521.  
  522.                         Reset_Global_Colors;
  523.                      END;
  524.  
  525.       WaitSy      : BEGIN
  526.  
  527.                        TimeW := COPY( Script_String, 1, 8 );
  528.  
  529.                        Save_Screen( Local_Save );
  530.  
  531.                        Draw_Menu_Frame( 10, 10, 60, 14, Menu_Frame_Color,
  532.                                         Menu_Text_Color,
  533.                                         'Wait For Specified Time' );
  534.  
  535.                        WRITELN('Waiting for:  ',TimeW);
  536.                        WRITE  ('Current time: ');
  537.  
  538.                        I         := WhereY;
  539.                        TimeN     := '';
  540.                        ESC_Found := FALSE;
  541.  
  542.                        REPEAT
  543.                           TimeO := TimeN;
  544.                           TimeN := TimeString( TimeOfDay );
  545.                           IF ( TimeN <> TimeO ) THEN
  546.                              BEGIN
  547.                                 GoToXY( 15 , I );
  548.                                 WRITE( TimeN );
  549.                              END;
  550.                           IF KeyPressed THEN
  551.                              BEGIN
  552.                                 READ( Kbd, Ch );
  553.                                 IF ORD( Ch ) = ESC THEN
  554.                                    BEGIN
  555.                                       ESC_Found := TRUE;
  556.                                       IF KeyPressed THEN
  557.                                          READ( Kbd, Ch );
  558.                                    END;
  559.                              END;
  560.                        UNTIL( TimeN = TimeW ) OR ESC_Found;
  561.  
  562.                        Restore_Screen( Local_Save );
  563.  
  564.                        Reset_Global_Colors;
  565.  
  566.                     END;
  567.  
  568.       WhenSy      : BEGIN
  569.                        Script_When_Text       := Script_String;
  570.                        Script_When_Reply_Text := Script_String_2;
  571.                        When_Mode              := LENGTH( Script_When_Text ) > 0;
  572.                     END;
  573.  
  574.       WaitStrSy   : BEGIN
  575.                        Script_Wait_Text       := Script_String;
  576.                        Script_Wait_Reply_Text := Script_String_2;
  577.                        Script_Wait_Time       := Script_Integer_1;
  578.                        IF ( Script_Wait_Time > 0 ) THEN
  579.                           Really_Wait_String := TRUE
  580.                        ELSE
  581.                           BEGIN
  582.                              Really_Wait_String := FALSE;
  583.                              Script_Wait_Time   := -Script_Wait_Time;
  584.                           END;
  585.                        Script_Wait_Failure    := Script_Integer_2;
  586.                        Script_Wait_Start      := TimeOfDay;
  587.                        Script_Wait_Found      := FALSE;
  588.                        WaitString_Mode        := LENGTH( Script_Wait_Text ) > 0;
  589.  
  590.                     END;
  591.  
  592.       ELSE        ;
  593.  
  594.    END (* CASE *);
  595.  
  596. END   (* Execute_Command *);
  597.